package com.bite.spring.demo.Controller;

import com.bite.spring.demo.Student;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

// 添加类路径
@RequestMapping("/hello")
// 注解告诉框架扫描这里
@RestController
public class HelloController {
    // 添加方法路径
    @RequestMapping("/m1")
    public String m1111(){
        System.out.println("hello String-boot-run!");// 控制台输出的
        return "hello String-boot-web!";// web 中看到的
    }

    // 基本数据类型不能传空值 error 400
    @RequestMapping("/m2")
    public int m2222(int number){
        return number;
    }

    // 包装类类型可以传空值 返回null
    @RequestMapping("/m3")
    public String m3333(Integer number){
        return "number:" + number;
    }

    // 传对象 key是对象里的属性
    @RequestMapping("/m4")
    public String m4444(Student student){
        return student.toString();
    }

    // 传数组 字符串自动拼接
    @RequestMapping("/m5")
    public String m555(String[] arr){
        return "strings:" + Arrays.toString(arr);
    }

    // 参数绑定 重命名前后端的参数值（前端加密时或取别名时）
    // 从前端接收参数赋值给password
    // 此时传参只能传‘q’ 不能传password （绑定）
    @RequestMapping("/m6")
    public String m6(@RequestParam("q") String password){
        return "password :" + password;
    }

    // 参数绑定
    // 如果找不到 q 就为 null
    // 参数名匹配 永远是精确匹配！！！
    // 传 password=1 依旧是null
    @RequestMapping("/m7")
    public String getPassword(@RequestParam(value = "q",required = false) String password){
        return "password :" + password;
    }

    // 传数组
    @RequestMapping("/m8")
    // 需要参数绑定
    // 把数组的参数绑定成一个list
    public String fun1(@RequestParam List<Integer> list) {
        return "list:" + list;
    }

    // 传栈
    @RequestMapping("/m9")
    // 容器需要参数绑定
    public String fun2(@RequestParam Stack<Integer> stack) {
        return  "stack:" + stack;
    }

    // 传队列
    @RequestMapping("/m10")
    // 容器需要参数绑定
    public String fun(@RequestParam PriorityQueue<Integer> queue) {
        return  queue.toString();
    }

}
